package cn.com.ccxe.dao;

import java.util.List;

import cn.com.ccxe.core.entity.Keyword;
import cn.com.ccxe.core.entity.MonitorType;
import cn.com.ccxe.core.entity.Website;

public interface MonitorTypeDao {

	/**
	 * 添加MonitorType，MonitorType的ID请调用序列获取。
	 * @param monitorType
	 * @return
	 */
	public OperationStatus add(MonitorType monitorType);
	
	/**
	 * 修改MonitorType信息<br>
	 * 每个MonitorType对象都有一个唯一且不可变的ID，
	 * 在修改MonitorType对象时，在编写SQL语句时不能对ID进行任何修改。
	 * @param id
	 * @param monitorType
	 * @return 返回操作状态，请看{@link DBConstant}
	 */
	public OperationStatus update(int id,MonitorType monitorType);
	
	/**
	 * 修改MonitorType信息<br>
	 * monitorType对象中必须有ID，细节请看{@link #update(int, MonitorType)}方法
	 * @param monitorType
	 * @return
	 */
	public OperationStatus update(MonitorType monitorType);
	
	/**
	 * 根据{@link MonitorType}的ID删除,
	 * 在删除前还需确认没有任何一个{@link Website}或{@link Keywords}属于其类别。
	 * @param monitorTypeId
	 * @return
	 */
	public OperationStatus del(int monitorTypeId);

	/**
	 * 获取所有的{@link MonitorType}
	 * @return
	 */
	public List<MonitorType> selectAll() throws Exception;

	/**
	 * 根据{@link Keyword}的标识获取所有的类别
	 * @param keywordId
	 * @return
	 */
	public List<MonitorType> getAllByKeywordId(int keywordId);

	/**
	 * 根据{@link Website}的标识获取所有的类别
	 * @param websiteId
	 * @return
	 */
	public List<MonitorType> getAllByWebsiteId(int websiteId);

	/**
	 * 统计有多少引用关系关联到{@link MonitorType}。
	 * @param monitorTypeId
	 * @return
	 */
	public int countRelationship(int monitorTypeId);

	/**
	 * 根据ID获取{@link MonitorType}
	 * @param id
	 * @return
	 */
	public MonitorType get(int id);

}
